import java.util.Random;
import java.util.Scanner;

public class Demo {
    // 使用循环的方式来求斐波那契数列问题, 避免出现冗余运算.
    public static int fobi2(int n) {
        if (n == 1 || n == 2) {
            return 1;
        }
        int f1 = 1;
        int f2 = 2;
        int f3 = 0;
        for (int i = 3; i <= n; i++) {
            f3 =f1 + f2;
            f1 = f2;
            f2 = f3;
        }
        return f3;
    }
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        System.out.println(fobi2(n));
    }
    // 求斐波那契数列的第 N 项
    public static int fobi(int n) {
        if (n == 1 || n == 2) {
            return 1;
        }
        return fobi(n -1) + fobi(n -2);
    }
    public static void main17(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        System.out.println(fobi(n));
    }
    // 写一个递归方法，输入一个非负整数，返回组成它的数字之和. 例如，输入 1729, 则应该返回1+7+2+9，
    //它的和是19
    public static int sum(int num) {
        if (num < 10) {
            return num;
        }
        return num % 10 + sum(num / 10);
    }
    public static void main16(String[] args) {
        System.out.println(sum(1729));
    }
    // 递归求1 + 2 + 3 + ... + 10
    public static int fuc(int num) {
        if(num == 1) {
            return 1;
        }
        return num+fuc(num-1);
    }
    public static void main15(String[] args) {
        int sum = fuc(10);
        System.out.println(sum);
    }
    //  按顺序打印一个数字的每一位(例如 1234 打印出 1 2 3 4)
    public static void print(int a) {
        if (a > 9) {
            print(a/10);
        }
        System.out.println(a % 10);
    }
    public static void main14(String[] args) {
        print(1234);
    }
    // 递归求 N 的阶乘
    public static int function(int n) {
        int ret = 1;
        if(n == 1) {
            return 1;
        }else {
           ret = (n * function(n -1));
           return ret;
        }
    }
    public static void main13(String[] args) {
        int n = 5;
        int ret = function(n);
        System.out.println(n+"的阶乘是"+ ret);
    }
    // 使用调用方法计算 1! + 2! + 3! + 4! + 5!
    // 使用方法的优点是： 避免使用二重循环, 让代码更简单清晰
    public static int fun(int n) {
        int ret = 1;
        for (int i = 1; i <=n ; i++) {
            ret *= i;
        }
        return ret;
    }
    public static void main12(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int sum = 0;
        for (int i = 1; i < n ; i++) {
            sum += fun(n);
        }
        System.out.println(n+"的阶乘的和是"+sum);
    }
    // 逆序打印123
    public static void main11(String[] args) {
        int i = 123;
        while(i %10 != i ){
            System.out.println(i % 10);
            i = i/10;
        }
        System.out.println(i);
    }
    // 在同一个类中定义多个方法：要求不仅可以求两个整数的最大值，还可以求两个小数的最大值，以及两个小数和一个整数的大小关系
    public static int add(int a, int b) {
        return a > b? a : b;
    }
    public static double add(double a, double b) {
        return a > b? a : b;
    }
    public static void main10(String[] args) {
        int i = add(3,5);
        System.out.println(i);
        double n= add(3.4,3.2);
        System.out.println(n);
    }
    // 创建方法求两个数的最大值max2，随后再写一个求3个数的最大值的函数max3。
    //要求：在max3这个函数中，调用max2函数，来实现3个数的最大值计算
    public static int max2(int a, int b) {
        return a > b? a : b;
    }
    public static int max3(int a, int b, int c) {
        return(max2(a, b)>c? max2(a, b): c);
    }
    public static void main9(String[] args) {
       int n = max2(8,2);
       int i = max3(8,2,6);
        System.out.println("最大值是"+i);
    }
    // 调整数组顺序使得奇数位于偶数之前。调整之后，不关心大小顺序。
    public static void main8(String[] args) {
        int [] array = {1,2,3,4,5};
        int left = 0;
        int right = array.length-1;
        while(left < right) {
            while((left < right) && array[left] % 2 != 0) {
                left++;
            }
            while((left < right) && array[right] % 2 == 0) {
                right--;
            }
            int temp =array[left];
            array[left] = array[right];
            array[right] = temp;
        }
        for (int i = 0; i < array.length; i++) {
            System.out.println(array[i]);
        }
    }
    // 求一个整数，在内存当中存储时，二进制1的个数。
    public static void main7(String[] args) {
        int n = 5;
        int count = 0;
        while(n != 0){
            if ((n & 1) == 1) {
                count++;
            }
            n = n >>> 1;
        }
        System.out.println("共有"+count+"个1");
    }
    // 编写代码模拟三次密码输入的场景。 最多能输入三次密码，密码正确，提示“登录成功”,密码错误， 可以重新输
    //入，最多输入三次。三次均错，则提示退出程序
    public static void main6(String[] args) {
        Scanner scanner = new Scanner( System.in);
        int count = 3;
        while (count != 0) {
            System.out.println("请输入你的密码");
            String password =scanner.nextLine();
            if (password.equals("123456")) {
                System.out.println("密码正确");
                break;
            }else {
                System.out.println("密码错误");
                count--;
                System.out.println("你还有"+count+"次机会");
            }
        }
    }
    // 完成猜数字游戏 ，用户输入数字，判断该数字是大于，小于，还是等于随机生成的数字，等于的时候退出程序。
    public static void main5(String[] args) {
        Random random = new Random();
        int rand = random.nextInt(50)+50;//[50-100)  1-101
        System.out.println("rand "+rand);
        Scanner scanner = new Scanner(System.in);
        while (true) {
            System.out.print("请输入你要猜的数字：");
            int n = scanner.nextInt();
            if(n  < rand) {
                System.out.println("猜小了");
            }else if(n == rand) {
                System.out.println("猜对了");
                break;
            }else {
                System.out.println("猜大了！");
            }
        }
    }
    // 打印 X 图形
    public static void main4(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                if (i == j || i + j == n-1) {
                    System.out.print("*");
                }else {
                    System.out.print(" ");
                }
            }
            System.out.println();
        }
    }
    // 打印 1 - 100 之间所有的素数
    public static void main3(String[] args) {
        for (int i = 1; i < 100; i++) {
            if (i == 1) {
                System.out.println(i+"是素数");
            }else {
                int j = 2;
                for (; j <= i/2 ; j++) {
                    if (j % i == 0) {
                        break;
                    }
                }
                if (j > j/2) {
                    System.out.println(i+"是素数");
                }
            }

        }
    }
    // 输出 1000 - 2000 之间所有的闰年
    public static void main2(String[] args) {
        for (int i = 1000; i < 2000; i++) {
            if ((i % 100 == 0 && i % 400 == 0) || i % 4 == 0 ) {
                System.out.println(i + "是闰年");
            }
        }
    }
    // 编写程序数一下 1到 100 的所有整数中出现多少个数字9
    public static void main1(String[] args) {
        int count = 0;
        for (int i = 1; i <= 100 ; i++) {
            if (i / 10 == 9) {
                count++;
            }
            if (i % 10 == 9) {
                count++;
            }
        }
        System.out.println(count);
    }
}
